home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / tcppack / tcppackb.lzh / src / libnetwork / sock.c < prev    next >
C/C++ Source or Header  |  1994-08-10  |  2KB  |  98 lines

  1. /*
  2.  * sock.c
  3.  *
  4.  * Copyright (C) 1994 First Class Technology.
  5.  */
  6.  
  7. #include<stdio.h>
  8. #include<stdlib.h>
  9. #include<stddef.h>
  10. #include<string.h>
  11. #include"tcpipdrv.h"
  12. #include"network.h"
  13.  
  14. _ti_func search_ti_entry (void);
  15.  
  16. #define NOTUSED (0)
  17. #define SOCKBASE 128
  18. #define DEFNSOCK 32
  19. typedef struct usock
  20. {
  21.   int refcnt;
  22.   char noblock;
  23.   char type;
  24.   int rdysock;
  25.   void *p;
  26.   char *name;
  27.   int namelen;
  28.   char *peername;
  29.   int peernamelen;
  30.   char errcodes[4];        /* Protocol-specific error codes */
  31.   void *obuf;        /* Output buffer */
  32.   void *ibuf;        /* Input buffer */
  33.   char eol[3];        /* Text mode end-of-line sequence, if any */
  34.   int flag;            /* Mode flags, defined in socket.h */
  35.   int flush;            /* Character to trigger flush, if any */
  36.   int event;
  37. } usock;
  38.  
  39. long *
  40. get_sock_array (int *_n)
  41. {
  42.   struct usock *p;
  43.   _ti_func func = search_ti_entry ();
  44.   if (func)
  45.     {
  46.       int n, i;
  47.       usock *q;
  48.       long *dst;
  49.  
  50.       p = (usock *)func (_TI_sock_top, NULL);
  51.       n = 0;
  52.       for (i = n = 0, q = p; i < DEFNSOCK; i++, q++)
  53.     {
  54.       if (q->type != NOTUSED)
  55.         n++;
  56.     }
  57.       if (n)
  58.     {
  59.       long *x;
  60.       dst = (long *)malloc (n * sizeof (long));
  61.       if (!dst)
  62.         return NULL;
  63.  
  64.       x = dst;
  65.       for (i = 0, q = p; i < DEFNSOCK; i++, q++)
  66.         {
  67.           if (q->type != NOTUSED)
  68.         {
  69.           *x++ = i + SOCKBASE;
  70.         }
  71.         }
  72.       *_n = n;
  73.       return dst;
  74.     }
  75.     }
  76.   return NULL;
  77. }
  78.  
  79. /************************************************
  80.  *                        *
  81.  ************************************************/
  82. char *
  83. ntoa_sock (int sock, int type, char *p, int mode)
  84. {
  85.   _ti_func func = search_ti_entry ();
  86.   long args[4];
  87.  
  88.   if (func)
  89.     {
  90.       args[0] = sock;
  91.       args[1] = type;
  92.       args[2] = (long)p;
  93.       args[3] = mode;
  94.       return (char *)func (_TI_ntoa_sock, args);
  95.     }
  96.   return NULL;
  97. }
  98.